using System.Collections;
using System.Collections.Generic;
using TMPro;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;

// UI_StatsSlot 类，用于显示玩家属性的UI槽
public class UI_StatsSlot : MonoBehaviour, IPointerEnterHandler, IPointerExitHandler
{
    private UI ui;

    // 序列化字段，用于在编辑器中设置属性名称
    [SerializeField] private string statName;
    // 序列化字段，用于在编辑器中设置属性类型
    [SerializeField] private StatType statType;
    // 序列化字段，用于在编辑器中设置属性值的文本显示
    [SerializeField] private TextMeshProUGUI statValueText;
    // 序列化字段，用于在编辑器中设置属性名称的文本显示
    [SerializeField] private TextMeshProUGUI statNameText;

    [TextArea]
    [SerializeField] private string statDescription;

    // 在编辑器中验证时调用的方法
    private void OnValidate()
    {
        // 设置游戏对象的名称为 "Stat - " 加上属性名称
        gameObject.name = "Stat - " + statName;
        // 如果属性名称文本不为空，则设置其文本内容为属性名称
        if (statNameText != null)
        {
            statNameText.text = statName;
        }
    }

    // 在游戏开始时调用的方法
    void Start()
    {
        // 更新属性值的UI显示
        UpdateStatValueUI();

        ui = GetComponentInParent<UI>();
    }

    // 每帧调用一次的方法
    void Update()
    {
        // 此处为空，可以根据需要添加逻辑
    }

    // 更新属性值的UI显示的方法
    public void UpdateStatValueUI()
    {
        // 获取玩家的属性
        PlayerStats playerStats = PlayerManager.instance.player.GetComponent<PlayerStats>();
        // 如果玩家属性不为空，则更新属性值的文本显示
        if (playerStats != null)
        {
            statValueText.text = playerStats.GetStat(statType).GetValue().ToString();

            if (statType == StatType.health)
                statValueText.text = playerStats.GetMaxHealthValue().ToString();

            if (statType == StatType.damage)
                statValueText.text = (playerStats.damage.GetValue() + playerStats.strength.GetValue()).ToString();

            if (statType == StatType.critPower)
                statValueText.text = (playerStats.critPower.GetValue() + playerStats.strength.GetValue()).ToString();

            if (statType == StatType.critChance)
                statValueText.text = (playerStats.critChance.GetValue() + playerStats.agility.GetValue()).ToString();

            if (statType == StatType.evasion)
                statValueText.text = (playerStats.evasion.GetValue() + playerStats.agility.GetValue()).ToString();

            if (statType == StatType.magicRes)
                statValueText.text = (playerStats.magicResistance.GetValue() + playerStats.intelligence.GetValue() * 3).ToString();
        }

    }

    // 鼠标放上去显示状态信息
    public void OnPointerEnter(PointerEventData eventData)
    {
        ui.statToolTip.ShowStatToolTip(statDescription);
    }
    // 鼠标移走隐藏状态信息
    public void OnPointerExit(PointerEventData eventData)
    {
        ui.statToolTip.HideStatToolTip();
    }
}